﻿using System;
using System.Collections.Generic;
using System.Windows.Forms;
using Library;

namespace Directory
{
  /// <summary>
  /// コンピューターリスト画面のフォームです。
  /// </summary>
  internal sealed partial class ComputerList : Form
  {
    #region プライベートフィールド
    private readonly IEnumerable<DomainGroup> groups;   //グループのリスト
    #endregion

    #region パブリックコンストラクター
    /// <summary>
    /// ComputerList クラスの新しいインスタンスを初期化します。
    /// </summary>
    public ComputerList()
    {
      InitializeComponent();

      groups = DirectoryAccess.GetGroups<DomainGroup>();  //グループを取得
      this.ComputerBindingSource.DataSource = DirectoryAccess.GetComputers();   //コンピューターを取得
      this.CountLabel.Text = String.Format("{0} 個のオブジェクト", this.ComputerBindingSource.Count);
    }
    #endregion

    #region イベントハンドラ
    private void ComputerListBox_SelectedIndexChanged(object sender, EventArgs e)
    {
      if (this.ComputerListBox.SelectedIndex == -1)
      {
        return;
      }

      ShowBelongGroups();   //所属するグループを表示
    }

    private void GroupButton_Click(object sender, EventArgs e)
    {
      var pc = (Computer)this.ComputerBindingSource.Current;    //選択されたコンピューター
      using (var fm = new InRoleGroupList(pc))
      {
        fm.ShowDialog(this);
      }
    }
    #endregion

    #region プライベートメソッド
    /// <summary>
    /// 所属するグループを表示します。
    /// </summary>
    private void ShowBelongGroups()
    {
      var pc = (Computer)this.ComputerBindingSource.Current;    //選択されたコンピューター
      this.GroupListBox.DataSource = pc.GetBelongGroups(groups);  //所属するグループを取得
    }
    #endregion
  }
}
